package main

import "fmt"

func main() {
    // --- 条件判断 (if/else) ---
    x := 10
    if x > 5 {
        fmt.Println("x 大于 5")
    } else {
        fmt.Println("x 不大于 5")
    }

    // if 语句可以包含一个简短的初始化语句，其声明的变量作用域仅在 if/else 块内。
    if y := 20; y > 15 {
        fmt.Println("y 大于 15")
    } else {
        fmt.Println("y 不大于 15")
    }
    // fmt.Println(y) // 这里会报错，因为 y 的作用域只在 if/else 内部

    // --- 循环 (for) ---
    // Go 语言只有 for 循环一种循环结构。

    // 1. 基本的 for 循环 (类似 C 的 for)
    sum := 0
    for i := 0; i < 5; i++ {
        sum += i
    }
    fmt.Println("0到4的和是:", sum)

    // 2. 类似 while 的 for 循环
    // 可以省略初始化语句和后置语句。
    n := 1
    for n < 5 {
        n *= 2
    }
    fmt.Println("n 的最终值是:", n)

    // 3. 无限循环
    // for {
    //     fmt.Println("这是一个无限循环")
    //     // 需要使用 break 来跳出
    // }

    // 4. for-range 循环
    // 用于遍历数组、切片、字符串、map 或通道。
    nums := []int{1, 2, 3, 4, 5}
    for index, value := range nums {
        fmt.Printf("索引: %d, 值: %d\n", index, value)
    }

    // --- 多路选择 (switch) ---
    day := "tuesday"
    switch day {
    case "monday", "tuesday", "wednesday", "thursday", "friday":
        fmt.Println("是工作日")
    case "saturday", "sunday":
        fmt.Println("是周末")
    default:
        fmt.Println("无效的日期")
    }

    // switch 后面可以没有表达式，这等价于 switch true
    // 这种形式可以替代复杂的 if-then-else 链。
    score := 85
    switch {
    case score < 60:
        fmt.Println("不及格")
    case score >= 60 && score < 80:
        fmt.Println("及格")
    case score >= 80 && score < 90:
        fmt.Println("良好")
    default:
        fmt.Println("优秀")
    }
}